//柯里化（currying）
function currying(fn, n) {
    return function (m) {
      return fn.call(this,m, n);
    };
  }
  
  function tailFactorial(n, total) {
    if (n === 1) return total;
    return tailFactorial(n - 1, n * total);
  }
  
  const factorial = currying(tailFactorial, 1);
  
  console.log(factorial(5))// 120
//   第二种方法就简单多了，就是采用 ES6 的函数默认值。
  // function factorial(n, total = 1) {
  //   if (n === 1) return total;
  //   return factorial(n - 1, n * total);
  // }
  
  // factorial(5) // 120